package cn.wzut.edut.service;

import cn.wzut.edut.dao.inf.Permission;
import cn.wzut.edut.dao.inf.Role;
import cn.wzut.edut.dao.pojo.table.SysRolePermissionRel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;

import java.util.*;

@Service
@CacheEvict(value = "ResUrls")
public class PermissionService {

    @Autowired
    Permission permission;

    @Autowired
    Role role;

    /**
     * 移除权限赋予的角色
     * @param permissionId
     * @param roleIds
     * @return
     */
    public boolean delPermissionRole(String permissionId, String[] roleIds) {
        List<String> role_id = Arrays.asList(roleIds);
        List<String> permission_id = Arrays.asList(permissionId);
        return role.delSysRolePermissionList(null, role_id, permission_id);
    }

    /**
     * 添加权限赋予的角色
     * @param permissionId
     * @param roleIds
     * @return
     */
    public int addPermissionRole(String permissionId, String[] roleIds) {
        List<SysRolePermissionRel> sysRolePermissionRelList = new ArrayList<>();
        for(String roleId : roleIds){
            sysRolePermissionRelList.add(new SysRolePermissionRel(null, roleId, permissionId));
        }
        return role.insertSysRolePermissionRelList(sysRolePermissionRelList);
    }

    /**
     * 获取权限列表
     * @return
     */
    public Map<String, Object> getPermissionList(long current, long size) {
        //返回字典
        Map<String, Object> data = new HashMap<>();
        data.put("sysPermissionList", permission.selectSysPermissionPage((String) null, null, null, current, size));
        data.put("sysPermissionCount", permission.countSysPermission(null, null, null));
        return data;
    }



//    /**
//     * 获取权限列表
//     * @param token
//     * @return
//     */
//    public List<SysPermission> getPermissionList(String token, long current, long size){
//        // 解析token
//        DecodedJWT decode = JWTUtils.decode(token);
//        // 判断角色是否拥有该权限
//        if(true){
//            return permission.selectAllPermissionPage(current, size);
//        }
//        throw new ServiceException(-1, "获取权限列表失败（无权调用）");
//    }
//
//    /**
//     * 查询权限列表
//     * @param token
//     * @return
//     */
//    public List<SysPermission> getPermissionListByName(String token, long current, long size, String name){
//        // 解析token
//        DecodedJWT decode = JWTUtils.decode(token);
//        // 判断角色是否拥有该权限
//        if(true){
//            return permission.selectSysPermissionInNamePage(current, size, name);
//        }
//        throw new ServiceException(-1, "查询权限列表失败（无权调用）");
//    }
//
//    /**
//     * 获取当前权限赋予的角色
//     * @param token
//     * @return
//     */
//    public List<SysRole> getRoleByPermission(String token, long current, long size, String permission_id){
//        // 解析token
//        DecodedJWT decode = JWTUtils.decode(token);
//        // 判断角色是否拥有该权限
//        if(true){
//            return role.selectRoleInPermissionId(permission_id);
//        }
//        throw new ServiceException(-1, "获取当前权限赋予的角色失败（无权调用）");
//    }
//
//    /**
//     * 更改权限赋予
//     * @param token
//     * @return
//     */
//    public boolean updatePermission(String token, String permission_id, String del_roleid[], String add_roleid[]){
//        // 解析token
//        DecodedJWT decode = JWTUtils.decode(token);
//        // 判断角色是否拥有该权限
//        if(true){
//            for (String role_id : add_roleid) {
//                permission.insertSysRolePermissionRel(role_id, permission_id);
//            }
//            for (String role_id : del_roleid) {
//                permission.delSysRolePermission(role_id, permission_id);
//            }
//            return true;
//        }
//        throw new ServiceException(-1, "更改权限赋予失败（无权调用）");
//    }

}
